//第十四天错题

//2024年3月13日

#include <stdio.h>
#include <math.h>

//计算一个非负实数的平方根
int main()
{
	double a = 0.012096;
	scanf("%lf", &a);
	double b = sqrt(a);
	printf("%lf", b);
}

//1.

int fun(char* s)
{
	char* t = s;
	//当t为0时，循环结束，此时t为\0的地址，而t++之后，t为\0下一个的内存地址
	//而指针相减求的是之间的元素个数，而t是\0下一个的地址，所以t-s是元素个数再加上\0
	//又因为字符类型占一个字节，所以，t-s求得就是s所占的字节个数
	while (*t++);
	return(t - s);
}

//2.
//*(pa++) 为后置++，所以*(pa++)指向的是pa的地址，所以*(pa++) *= 3;的作用是将pa指向的内容扩大三倍，后再将pa++，指向下一个元素
float a[3] = { 1.5,2.5,3.5 };
float *pa = a;
*(pa++) *= 3;

//3.
//*q为空指针，地址为0x0，不能访问该地址，故不可以给该地址写入一个数

int main()
{
	int a[] = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12 }, * p = a + 5, * q = NULL;
	*q = *(p + 5);
	printf("%d %d\n", *p, *q);
	return 0;
}

//4.如何取到'j'
 
//p为指针数组，存放指针的数组,p[1]拿到第二个字符串的首地址，+3拿到'j'的地址，解引用得到'j'
//故 *(p[1]+3) == j
int main()
{
	char* p[] = { "Shanghai","Beijing","Honkong" };
}

//5.
//不同类型指针一般不可以直接赋值
//p = NULL； 和 p = 0； 是等价的
//指向同一数组的两指针变量进行关系运算可表示它们所指数组元素的位置关系
//如果企图通过一个空指针来访问一个储存单元，将会得到一个出错信息
